\section{字典}

字典（Dictionary）是Python中的一种数据类型，用来存储键（key）值（value）对。字典数据能够使用键名快速取回、添加、删除、编辑值。字典和其他语言中的数组（array）或者哈希表（hash）非常相似。字典是可变（mutable）序列。\cite{Lutz，2011}

\subsection{创建字典}
使用花括弧 ({})就可创建字典。字典中的每一个项目都由键名、冒号(:)和值组成，多个项目之间用逗号(,)分割。让我们看一个实例：

\begin{lstlisting}
friends = {
'tom' 	: '66666666',
'jerry' : '88888888'
}
\end{lstlisting}

上面的变量friends是一个含有两个项目的字典。需要注意的一点是，键名必须是可哈希\cite{PSF，2015b}类型，而值可以是任意类型。字典中的键名必须是唯一的。

\subsection{获取、修改和添加字典元素}

获取字典中的项目，使用如下语法：

\begin{lstlisting}
dictionary_name['key']
\end{lstlisting}

例如：

\begin{lstlisting}
>>> friends['tom']
'66666666'
\end{lstlisting}

如果字典中存在指定的键名，则返回对应的值，否则抛出键名异常。

添加和编辑项目，使用如下语法：

\begin{lstlisting}
dictionary_name['newkey'] = 'newvalue'
\end{lstlisting}

例如：

\begin{lstlisting}
>>> friends['bob'] = '99999999'
>>> friends
{'jerry': '88888888', 'bob': '99999999', 'tom': '66666666'}
\end{lstlisting}

删除字典中的项目使用如下语法：

\begin{lstlisting}
del dictionary_name['key']
\end{lstlisting}
例如：

\begin{lstlisting}
>>>  del friends['bob']
>>>  friends
{'tom': '66666666', 'jerry': '88888888'}
\end{lstlisting}

\subsection{遍历字典}
我们可以使用循环遍历字典中的所有项目。

\begin{lstlisting}
>>> friends = {
...     'tom'   : '66666666',
...     'jerry': '88888888'
... }
>>> for key in friends:
...     print(key, ":", friends[key])
...
tom : 66666666
jerry : 88888888
\end{lstlisting}

\subsection{字典比较}
使用 == 和 != 操作符判断字典是否包含相同的项目。

\begin{lstlisting}
>>> d1 = {"mike":41, "bob":3}
>>> d2 = {"bob":3, "mike":41}
>>> d1 == d2
True
>>> d1 != d2
False
>>>
\end{lstlisting}

\begin{myremark}{}
	不能使用其它的关系操作符(<  , > , >= , <= )比较字典类型变量。
\end{myremark}

\subsection{字典常用方法}
Python提供了多个内置的方法，用来操作字典，常用方法见下表\ref{tab:字典常用方法}：
% Table generated by Excel2LaTeX from sheet 'Sheet1'
\begin{table}[htbp]
  \centering
  \caption{字典常用方法}
    \begin{tabular}{ll}
    \toprule
    \textbf{方法名} & \textbf{方法用途} \\
    \midrule
    popitem() 			& 返回并移除字典中的任意项目 \\
    clear() 				& 删除字典中的所有项目 \\
    keys()  				& 以元组的形式获得字典的键名 \\
    values() 				& 以元组的形式获得字典的值 \\
    get(key) 				& 获得指定键名对应的值 \\
    pop(key) 				& 移除指定键名的项目 \\
    \bottomrule
    \end{tabular}%
  \label{tab:字典常用方法}%
\end{table}%

\begin{lstlisting}
>>> friends = {'tom': '111-222-333', 'bob': '888-999-666', 'jerry': '666-33-111'}

>>> friends.popitem()
('tom', '111-222-333')

>>> friends.clear()

>>>  friends
{}

>>> friends = {'tom': '111-222-333', 'bob': '888-999-666', 'jerry': '666-33-111'}

>>> friends.keys()
dict_keys(['tom', 'bob', 'jerry'])

>>> friends.values()
dict_values(['111-222-333', '888-999-666', '666-33-111'])

>>> friends.get('tom')
'111-222-333'

>>> friends.get('mike', 'Not Exists')
'Not Exists'

>>> friends.pop('bob')
'888-999-666'

>>> friends
{'tom': '111-222-333', 'jerry': '666-33-111'}
\end{lstlisting}
